﻿using System;
using System.Collections.Generic;
using System.Text;
using PersonaLibrary.ViewModel.SearchViewModel;

namespace PersonaLibrary.Search
{
	public class StringSearchCriteria : SearchCriteria
	{
		protected override List<string> CreateOperators()
		{
			List<string> result = new List<string>
			                      	{
			                      		"Содержит",
			                      		"Несодержит",
			                      		"Начинается",
			                      		"Заканчивается"
			                      	};

			result.AddRange(base.CreateOperators());

			return result;
		}

		public override void CreateWhere(StringBuilder stringBuilder)
		{
			stringBuilder.Append(PropertyName);

			switch (Operator)
			{
				case "Содержит":
					stringBuilder.Append(" like '%");
					stringBuilder.Append(Value);
					stringBuilder.Append("%'");
					break;

				case "Несодержит":
					stringBuilder.Append(" not like '%");
					stringBuilder.Append(Value);
					stringBuilder.Append("%'");
					break;

				case "Начинается":
					stringBuilder.Append(" like '%");
					stringBuilder.Append(Value);
					stringBuilder.Append("'");
					break;

				case "Заканчивается":
					stringBuilder.Append(" like '");
					stringBuilder.Append(Value);
					stringBuilder.Append("%'");
					break;

				case "=":
				case "!=":
					stringBuilder.Append(" ");
					stringBuilder.Append(Operator);
					stringBuilder.Append(" '");
					stringBuilder.Append(Value);
					stringBuilder.Append("'");
					break;

				default:
					throw new Exception(string.Format("Не известный оператор '{0}'", Operator));
			}
		}
	}
}
